package co.edu.usbcali.museo.presentation.backEndBeans;

import co.edu.usbcali.museo.exceptions.ExceptionMessages;
import co.edu.usbcali.museo.modelo.Autor;
import co.edu.usbcali.museo.modelo.Cuadro;
import co.edu.usbcali.museo.modelo.Museo;
import co.edu.usbcali.museo.modelo.Periodo;
import co.edu.usbcali.museo.modelo.Restauracion;
import co.edu.usbcali.museo.modelo.Sesion;
import co.edu.usbcali.museo.modelo.Tecnica;
import co.edu.usbcali.museo.modelo.Tipoestado;
import co.edu.usbcali.museo.modelo.control.AutorLogic;
import co.edu.usbcali.museo.modelo.control.CuadroLogic;
import co.edu.usbcali.museo.modelo.control.IAutorLogic;
import co.edu.usbcali.museo.modelo.control.ICuadroLogic;
import co.edu.usbcali.museo.modelo.control.IMuseoLogic;
import co.edu.usbcali.museo.modelo.control.IPeriodoLogic;
import co.edu.usbcali.museo.modelo.control.IRestauracionLogic;
import co.edu.usbcali.museo.modelo.control.ISesionLogic;
import co.edu.usbcali.museo.modelo.control.ITecnicaLogic;
import co.edu.usbcali.museo.modelo.control.ITipoestadoLogic;
import co.edu.usbcali.museo.modelo.control.MuseoLogic;
import co.edu.usbcali.museo.modelo.control.PeriodoLogic;
import co.edu.usbcali.museo.modelo.control.RestauracionLogic;
import co.edu.usbcali.museo.modelo.control.SesionLogic;
import co.edu.usbcali.museo.modelo.control.TecnicaLogic;
import co.edu.usbcali.museo.modelo.control.TipoestadoLogic;
import co.edu.usbcali.museo.modelo.dto.CuadroDTO;
import co.edu.usbcali.museo.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.museo.utilities.DataPage;
import co.edu.usbcali.museo.utilities.DataSource;
import co.edu.usbcali.museo.utilities.PagedListDataModel;
import co.edu.usbcali.museo.utilities.Utilities;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;


/**
 *
 * @author Zathura Code Generator http://code.google.com/p/zathura,
 *
 */
public class CuadroView extends DataSource implements Renderable,
    DisposableBean {
    private HtmlInputText txtNombrecuadro;
    private HtmlInputText txtValoreconomico;
    private HtmlInputText txtValorrecaudado;
    private HtmlInputText txtCodautor_Autor;
    private HtmlInputText txtCodperiodo_Periodo;
    private HtmlInputText txtCodtecnica_Tecnica;
    private HtmlInputText txtCodtipoestado_Tipoestado;
    private HtmlInputText txtCodcuadro;
    private SelectInputDate txtFechaentradamuseo;
    private SelectInputDate txtFechaultimarestauracion;
    private HtmlCommandButton btnSave;
    private HtmlCommandButton btnModify;
    private HtmlCommandButton btnDelete;
    private HtmlCommandButton btnClear;
    private boolean renderDataTable;
    private boolean flag = true;
    private RenderManager renderManager;
    private PersistentFacesState state = PersistentFacesState.getInstance();
    private List<Cuadro> cuadro;
    private List<CuadroDTO> cuadroDTO;

    public CuadroView() {
        super("");
    }

    public String action_clear() {
        txtNombrecuadro.setValue(null);
        txtNombrecuadro.setDisabled(true);
        txtValoreconomico.setValue(null);
        txtValoreconomico.setDisabled(true);
        txtValorrecaudado.setValue(null);
        txtValorrecaudado.setDisabled(true);
        txtCodautor_Autor.setValue(null);
        txtCodautor_Autor.setDisabled(true);
        txtCodperiodo_Periodo.setValue(null);
        txtCodperiodo_Periodo.setDisabled(true);
        txtCodtecnica_Tecnica.setValue(null);
        txtCodtecnica_Tecnica.setDisabled(true);
        txtCodtipoestado_Tipoestado.setValue(null);
        txtCodtipoestado_Tipoestado.setDisabled(true);
        txtFechaentradamuseo.setValue(null);
        txtFechaentradamuseo.setDisabled(true);
        txtFechaultimarestauracion.setValue(null);
        txtFechaultimarestauracion.setDisabled(true);
        txtCodcuadro.setValue(null);
        txtCodcuadro.setDisabled(false);
        btnSave.setDisabled(true);
        btnDelete.setDisabled(true);
        btnModify.setDisabled(true);
        btnClear.setDisabled(false);

        return "";
    }

    public void listener_txtId(ValueChangeEvent event) {
        if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
            Cuadro entity = null;

            try {
                Long codcuadro = new Long(txtCodcuadro.getValue().toString());
                entity = BusinessDelegatorView.getCuadro(codcuadro);
            } catch (Exception e) {
                // TODO: handle exception
            }

            if (entity == null) {
                txtNombrecuadro.setDisabled(false);
                txtValoreconomico.setDisabled(false);
                txtValorrecaudado.setDisabled(false);
                txtCodautor_Autor.setDisabled(false);
                txtCodperiodo_Periodo.setDisabled(false);
                txtCodtecnica_Tecnica.setDisabled(false);
                txtCodtipoestado_Tipoestado.setDisabled(false);
                txtFechaentradamuseo.setDisabled(false);
                txtFechaultimarestauracion.setDisabled(false);
                txtCodcuadro.setDisabled(false);
                btnSave.setDisabled(false);
                btnDelete.setDisabled(true);
                btnModify.setDisabled(true);
                btnClear.setDisabled(false);
            } else {
                txtFechaentradamuseo.setValue(entity.getFechaentradamuseo());
                txtFechaentradamuseo.setDisabled(false);
                txtFechaultimarestauracion.setValue(entity.getFechaultimarestauracion());
                txtFechaultimarestauracion.setDisabled(false);
                txtNombrecuadro.setValue(entity.getNombrecuadro());
                txtNombrecuadro.setDisabled(false);
                txtValoreconomico.setValue(entity.getValoreconomico());
                txtValoreconomico.setDisabled(false);
                txtValorrecaudado.setValue(entity.getValorrecaudado());
                txtValorrecaudado.setDisabled(false);
                txtCodautor_Autor.setValue(entity.getAutor().getCodautor());
                txtCodautor_Autor.setDisabled(false);
                txtCodperiodo_Periodo.setValue(entity.getPeriodo()
                                                     .getCodperiodo());
                txtCodperiodo_Periodo.setDisabled(false);
                txtCodtecnica_Tecnica.setValue(entity.getTecnica()
                                                     .getCodtecnica());
                txtCodtecnica_Tecnica.setDisabled(false);
                txtCodtipoestado_Tipoestado.setValue(entity.getTipoestado()
                                                           .getCodtipoestado());
                txtCodtipoestado_Tipoestado.setDisabled(false);
                txtCodcuadro.setValue(entity.getCodcuadro());
                txtCodcuadro.setDisabled(true);
                btnSave.setDisabled(true);
                btnDelete.setDisabled(false);
                btnModify.setDisabled(false);
                btnClear.setDisabled(false);
            }
        }
    }

    public String action_save() {
        try {
            BusinessDelegatorView.saveCuadro((((txtCodcuadro.getValue()) == null) ||
                (txtCodcuadro.getValue()).equals("")) ? null
                                                      : new Long(
                    txtCodcuadro.getValue().toString()),
                (((txtFechaentradamuseo.getValue()) == null) ||
                (txtFechaentradamuseo.getValue()).equals("")) ? null
                                                              : (Date) txtFechaentradamuseo.getValue(),
                (((txtFechaultimarestauracion.getValue()) == null) ||
                (txtFechaultimarestauracion.getValue()).equals("")) ? null
                                                                    : (Date) txtFechaultimarestauracion.getValue(),
                (((txtNombrecuadro.getValue()) == null) ||
                (txtNombrecuadro.getValue()).equals("")) ? null
                                                         : new String(
                    txtNombrecuadro.getValue().toString()),
                (((txtValoreconomico.getValue()) == null) ||
                (txtValoreconomico.getValue()).equals("")) ? null
                                                           : new Double(
                    txtValoreconomico.getValue().toString()),
                (((txtValorrecaudado.getValue()) == null) ||
                (txtValorrecaudado.getValue()).equals("")) ? null
                                                           : new Double(
                    txtValorrecaudado.getValue().toString()),
                (((txtCodautor_Autor.getValue()) == null) ||
                (txtCodautor_Autor.getValue()).equals("")) ? null
                                                           : new Long(
                    txtCodautor_Autor.getValue().toString()),
                (((txtCodperiodo_Periodo.getValue()) == null) ||
                (txtCodperiodo_Periodo.getValue()).equals("")) ? null
                                                               : new Long(
                    txtCodperiodo_Periodo.getValue().toString()),
                (((txtCodtecnica_Tecnica.getValue()) == null) ||
                (txtCodtecnica_Tecnica.getValue()).equals("")) ? null
                                                               : new Long(
                    txtCodtecnica_Tecnica.getValue().toString()),
                (((txtCodtipoestado_Tipoestado.getValue()) == null) ||
                (txtCodtipoestado_Tipoestado.getValue()).equals("")) ? null
                                                                     : new Long(
                    txtCodtipoestado_Tipoestado.getValue().toString()));
            FacesContext.getCurrentInstance()
                        .addMessage("",
                new FacesMessage(ExceptionMessages.ENTITY_SUCCESFULLYSAVED));
        } catch (Exception e) {
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
        }

        action_clear();

        return "";
    }

    public String action_delete() {
        try {
            BusinessDelegatorView.deleteCuadro((((txtCodcuadro.getValue()) == null) ||
                (txtCodcuadro.getValue()).equals("")) ? null
                                                      : new Long(
                    txtCodcuadro.getValue().toString()));
            FacesContext.getCurrentInstance()
                        .addMessage("",
                new FacesMessage(ExceptionMessages.ENTITY_SUCCESFULLYDELETED));
        } catch (Exception e) {
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
        }

        action_clear();

        return "";
    }

    public String action_modify() {
        try {
            BusinessDelegatorView.updateCuadro((((txtCodcuadro.getValue()) == null) ||
                (txtCodcuadro.getValue()).equals("")) ? null
                                                      : new Long(
                    txtCodcuadro.getValue().toString()),
                (((txtFechaentradamuseo.getValue()) == null) ||
                (txtFechaentradamuseo.getValue()).equals("")) ? null
                                                              : (Date) txtFechaentradamuseo.getValue(),
                (((txtFechaultimarestauracion.getValue()) == null) ||
                (txtFechaultimarestauracion.getValue()).equals("")) ? null
                                                                    : (Date) txtFechaultimarestauracion.getValue(),
                (((txtNombrecuadro.getValue()) == null) ||
                (txtNombrecuadro.getValue()).equals("")) ? null
                                                         : new String(
                    txtNombrecuadro.getValue().toString()),
                (((txtValoreconomico.getValue()) == null) ||
                (txtValoreconomico.getValue()).equals("")) ? null
                                                           : new Double(
                    txtValoreconomico.getValue().toString()),
                (((txtValorrecaudado.getValue()) == null) ||
                (txtValorrecaudado.getValue()).equals("")) ? null
                                                           : new Double(
                    txtValorrecaudado.getValue().toString()),
                (((txtCodautor_Autor.getValue()) == null) ||
                (txtCodautor_Autor.getValue()).equals("")) ? null
                                                           : new Long(
                    txtCodautor_Autor.getValue().toString()),
                (((txtCodperiodo_Periodo.getValue()) == null) ||
                (txtCodperiodo_Periodo.getValue()).equals("")) ? null
                                                               : new Long(
                    txtCodperiodo_Periodo.getValue().toString()),
                (((txtCodtecnica_Tecnica.getValue()) == null) ||
                (txtCodtecnica_Tecnica.getValue()).equals("")) ? null
                                                               : new Long(
                    txtCodtecnica_Tecnica.getValue().toString()),
                (((txtCodtipoestado_Tipoestado.getValue()) == null) ||
                (txtCodtipoestado_Tipoestado.getValue()).equals("")) ? null
                                                                     : new Long(
                    txtCodtipoestado_Tipoestado.getValue().toString()));
            FacesContext.getCurrentInstance()
                        .addMessage("",
                new FacesMessage(ExceptionMessages.ENTITY_SUCCESFULLYMODIFIED));
        } catch (Exception e) {
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
        }

        action_clear();

        return "";
    }

    public String action_modifyWitDTO(Long codcuadro, Date fechaentradamuseo,
        Date fechaultimarestauracion, String nombrecuadro,
        Double valoreconomico, Double valorrecaudado, Long codautor_Autor,
        Long codperiodo_Periodo, Long codtecnica_Tecnica,
        Long codtipoestado_Tipoestado) throws Exception {
        try {
            BusinessDelegatorView.updateCuadro(codcuadro, fechaentradamuseo,
                fechaultimarestauracion, nombrecuadro, valoreconomico,
                valorrecaudado, codautor_Autor, codperiodo_Periodo,
                codtecnica_Tecnica, codtipoestado_Tipoestado);
            renderManager.getOnDemandRenderer("CuadroView").requestRender();
            FacesContext.getCurrentInstance()
                        .addMessage("",
                new FacesMessage(ExceptionMessages.ENTITY_SUCCESFULLYMODIFIED));
        } catch (Exception e) {
            //renderManager.getOnDemandRenderer("CuadroView").requestRender();
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
            throw e;
        }

        return "";
    }

    public List<Cuadro> getCuadro() {
        if (flag) {
            try {
                cuadro = BusinessDelegatorView.getCuadro();
                flag = false;
            } catch (Exception e) {
                flag = true;
                FacesContext.getCurrentInstance()
                            .addMessage("", new FacesMessage(e.getMessage()));
            }
        }

        return cuadro;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setCuadro(List<Cuadro> cuadro) {
        this.cuadro = cuadro;
    }

    public boolean isRenderDataTable() {
        try {
            if (flag) {
                if (BusinessDelegatorView.findTotalNumberCuadro() > 0) {
                    renderDataTable = true;
                } else {
                    renderDataTable = false;
                }
            }

            flag = false;
        } catch (Exception e) {
            renderDataTable = false;
            e.printStackTrace();
        }

        return renderDataTable;
    }

    public DataModel getData() {
        state = PersistentFacesState.getInstance();

        if (onePageDataModel == null) {
            onePageDataModel = new LocalDataModel(pageSize);
        }

        return onePageDataModel;
    }

    /**
    * This is where the Object data is retrieved from the database and
    * returned as a list of objects for display in the UI.
    */
    private DataPage<Cuadro> getDataPage(int startRow, int pageSize) {
        // Retrieve the total number of objects from the database.  This
        // number is required by the DataPage object so the paginator will know
        // the relative location of the page data.
        int totalNumberCuadro = 0;

        try {
            totalNumberCuadro = BusinessDelegatorView.findTotalNumberCuadro()
                                                     .intValue();
        } catch (Exception e) {
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
        }

        // Calculate indices to be displayed in the ui.
        int endIndex = startRow + pageSize;

        if (endIndex > totalNumberCuadro) {
            endIndex = totalNumberCuadro;
        }

        try {
            cuadro = BusinessDelegatorView.findPageCuadro(sortColumnName,
                    sortAscending, startRow, endIndex - startRow);

            // Remove this Renderable from the existing render groups.
            //leaveRenderGroups();        			
        } catch (Exception e) {
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
        }

        // Add this Renderable to the new render groups.
        //joinRenderGroups();
        // Reset the dirtyData flag.
        onePageDataModel.setDirtyData(false);
        // This is required when using Hibernate JPA.  If the EntityManager is not
        // cleared or closed objects are cached and stale objects will show up
        // in the table.
        // This way, the detached objects are reread from the database.
        // This call is not required with TopLink JPA, which uses a Query Hint
        // to clear the l2 cache in the DAO.
        //EntityManagerHelper.getEntityManager().clear();
        flag = true;

        return new DataPage<Cuadro>(totalNumberCuadro, startRow, cuadro);
    }

    public DataModel getDataDTO() {
        state = PersistentFacesState.getInstance();

        if (onePageDataModel == null) {
            onePageDataModel = new LocalDataModelDTO(pageSize);
        }

        return onePageDataModel;
    }

    /**
    * This is where the Object data is retrieved from the database and
    * returned as a list of objects for display in the UI.
    */
    private DataPage<CuadroDTO> getDataPageDTO(int startRow, int pageSize) {
        // Retrieve the total number of objects from the database.  This
        // number is required by the DataPage object so the paginator will know
        // the relative location of the page data.
        int totalNumberCuadro = 0;

        try {
            totalNumberCuadro = BusinessDelegatorView.findTotalNumberCuadro()
                                                     .intValue();
        } catch (Exception e) {
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
        }

        // Calculate indices to be displayed in the ui.
        int endIndex = startRow + pageSize;

        if (endIndex > totalNumberCuadro) {
            endIndex = totalNumberCuadro;
        }

        try {
            cuadro = BusinessDelegatorView.findPageCuadro(sortColumnName,
                    sortAscending, startRow, endIndex - startRow);

            if (Utilities.validationsList(cuadro)) {
                cuadroDTO = new ArrayList<CuadroDTO>();

                for (Cuadro cuadroTmp : cuadro) {
                    CuadroDTO cuadroDTO2 = new CuadroDTO();
                    cuadroDTO2.setCodcuadro(cuadroTmp.getCodcuadro().toString());
                    cuadroDTO2.setFechaentradamuseo(cuadroTmp.getFechaentradamuseo());
                    cuadroDTO2.setFechaultimarestauracion(cuadroTmp.getFechaultimarestauracion());
                    cuadroDTO2.setNombrecuadro((cuadroTmp.getNombrecuadro() != null)
                        ? cuadroTmp.getNombrecuadro().toString() : null);
                    cuadroDTO2.setValoreconomico((cuadroTmp.getValoreconomico() != null)
                        ? cuadroTmp.getValoreconomico().toString() : null);
                    cuadroDTO2.setValorrecaudado((cuadroTmp.getValorrecaudado() != null)
                        ? cuadroTmp.getValorrecaudado().toString() : null);
                    cuadroDTO2.setCodautor_Autor((cuadroTmp.getAutor()
                                                           .getCodautor() != null)
                        ? cuadroTmp.getAutor().getCodautor().toString() : null);
                    cuadroDTO2.setCodperiodo_Periodo((cuadroTmp.getPeriodo()
                                                               .getCodperiodo() != null)
                        ? cuadroTmp.getPeriodo().getCodperiodo().toString() : null);
                    cuadroDTO2.setCodtecnica_Tecnica((cuadroTmp.getTecnica()
                                                               .getCodtecnica() != null)
                        ? cuadroTmp.getTecnica().getCodtecnica().toString() : null);
                    cuadroDTO2.setCodtipoestado_Tipoestado((cuadroTmp.getTipoestado()
                                                                     .getCodtipoestado() != null)
                        ? cuadroTmp.getTipoestado().getCodtipoestado().toString()
                        : null);
                    cuadroDTO2.setCuadro(cuadroTmp);
                    cuadroDTO2.setCuadroView(this);
                    cuadroDTO.add(cuadroDTO2);
                }
            }

            // Remove this Renderable from the existing render groups.
            leaveRenderGroups();
        } catch (Exception e) {
            FacesContext.getCurrentInstance()
                        .addMessage("", new FacesMessage(e.getMessage()));
        }

        // Add this Renderable to the new render groups.
        joinRenderGroups();
        // Reset the dirtyData flag.
        onePageDataModel.setDirtyData(false);
        // This is required when using Hibernate JPA.  If the EntityManager is not
        // cleared or closed objects are cached and stale objects will show up
        // in the table.
        // This way, the detached objects are reread from the database.
        // This call is not required with TopLink JPA, which uses a Query Hint
        // to clear the l2 cache in the DAO.
        //EntityManagerHelper.getEntityManager().clear();
        flag = true;

        return new DataPage<CuadroDTO>(totalNumberCuadro, startRow, cuadroDTO);
    }

    protected boolean isDefaultAscending(String sortColumn) {
        return true;
    }

    /**
    * This method is called when a render call is made from the server. Render
    * calls are only made to views containing an updated record. The data is
    * marked as dirty to trigger a fetch of the updated record from the
    * database before rendering takes place.
    */
    public PersistentFacesState getState() {
        onePageDataModel.setDirtyData();

        return state;
    }

    /**
    * This method is called from faces-config.xml with each new session.
    */
    public void setRenderManager(RenderManager renderManager) {
        this.renderManager = renderManager;
    }

    public void renderingException(RenderingException arg0) {
        if (arg0 instanceof TransientRenderingException) {
        } else if (arg0 instanceof FatalRenderingException) {
            // Remove from existing Customer render groups.
            leaveRenderGroups();
        }
    }

    /**
    * Remove this Renderable from existing uiCustomerBeans render groups.
    * OnDemandRenderers are named/created using the underlying Customer Number.
    */
    private void leaveRenderGroups() {
        if (Utilities.validationsList(cuadroDTO)) {
            for (CuadroDTO cuadroTmp : cuadroDTO) {
                renderManager.getOnDemandRenderer("CuadroView").remove(this);
            }
        }
    }

    /**
    * Add this Renderable to the new uiCustomerBeans render groups.
    * OnDemandRenderers are named/created using the underlying Customer Number.
    */
    private void joinRenderGroups() {
        if (Utilities.validationsList(cuadroDTO)) {
            for (CuadroDTO cuadroTmp : cuadroDTO) {
                renderManager.getOnDemandRenderer("CuadroView").add(this);
            }
        }
    }

    public void dispose() throws Exception {
    }

    public RenderManager getRenderManager() {
        return renderManager;
    }

    public void setState(PersistentFacesState state) {
        this.state = state;
    }

    public HtmlInputText getTxtNombrecuadro() {
        return txtNombrecuadro;
    }

    public void setTxtNombrecuadro(HtmlInputText txtNombrecuadro) {
        this.txtNombrecuadro = txtNombrecuadro;
    }

    public HtmlInputText getTxtValoreconomico() {
        return txtValoreconomico;
    }

    public void setTxtValoreconomico(HtmlInputText txtValoreconomico) {
        this.txtValoreconomico = txtValoreconomico;
    }

    public HtmlInputText getTxtValorrecaudado() {
        return txtValorrecaudado;
    }

    public void setTxtValorrecaudado(HtmlInputText txtValorrecaudado) {
        this.txtValorrecaudado = txtValorrecaudado;
    }

    public HtmlInputText getTxtCodautor_Autor() {
        return txtCodautor_Autor;
    }

    public void setTxtCodautor_Autor(HtmlInputText txtCodautor_Autor) {
        this.txtCodautor_Autor = txtCodautor_Autor;
    }

    public HtmlInputText getTxtCodperiodo_Periodo() {
        return txtCodperiodo_Periodo;
    }

    public void setTxtCodperiodo_Periodo(HtmlInputText txtCodperiodo_Periodo) {
        this.txtCodperiodo_Periodo = txtCodperiodo_Periodo;
    }

    public HtmlInputText getTxtCodtecnica_Tecnica() {
        return txtCodtecnica_Tecnica;
    }

    public void setTxtCodtecnica_Tecnica(HtmlInputText txtCodtecnica_Tecnica) {
        this.txtCodtecnica_Tecnica = txtCodtecnica_Tecnica;
    }

    public HtmlInputText getTxtCodtipoestado_Tipoestado() {
        return txtCodtipoestado_Tipoestado;
    }

    public void setTxtCodtipoestado_Tipoestado(
        HtmlInputText txtCodtipoestado_Tipoestado) {
        this.txtCodtipoestado_Tipoestado = txtCodtipoestado_Tipoestado;
    }

    public SelectInputDate getTxtFechaentradamuseo() {
        return txtFechaentradamuseo;
    }

    public void setTxtFechaentradamuseo(SelectInputDate txtFechaentradamuseo) {
        this.txtFechaentradamuseo = txtFechaentradamuseo;
    }

    public SelectInputDate getTxtFechaultimarestauracion() {
        return txtFechaultimarestauracion;
    }

    public void setTxtFechaultimarestauracion(
        SelectInputDate txtFechaultimarestauracion) {
        this.txtFechaultimarestauracion = txtFechaultimarestauracion;
    }

    public HtmlInputText getTxtCodcuadro() {
        return txtCodcuadro;
    }

    public void setTxtCodcuadro(HtmlInputText txtCodcuadro) {
        this.txtCodcuadro = txtCodcuadro;
    }

    public HtmlCommandButton getBtnSave() {
        return btnSave;
    }

    public void setBtnSave(HtmlCommandButton btnSave) {
        this.btnSave = btnSave;
    }

    public HtmlCommandButton getBtnModify() {
        return btnModify;
    }

    public void setBtnModify(HtmlCommandButton btnModify) {
        this.btnModify = btnModify;
    }

    public HtmlCommandButton getBtnDelete() {
        return btnDelete;
    }

    public void setBtnDelete(HtmlCommandButton btnDelete) {
        this.btnDelete = btnDelete;
    }

    public HtmlCommandButton getBtnClear() {
        return btnClear;
    }

    public void setBtnClear(HtmlCommandButton btnClear) {
        this.btnClear = btnClear;
    }

    public void setRenderDataTable(boolean renderDataTable) {
        this.renderDataTable = renderDataTable;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public List<CuadroDTO> getCuadroDTO() {
        return cuadroDTO;
    }

    public void setCuadroDTO(List<CuadroDTO> cuadroDTO) {
        this.cuadroDTO = cuadroDTO;
    }

    public TimeZone getTimeZone() {
        return java.util.TimeZone.getDefault();
    }

    /**
    * A special type of JSF DataModel to allow a datatable and datapaginator
    * to page through a large set of data without having to hold the entire
    * set of data in memory at once.
    * Any time a managed bean wants to avoid holding an entire dataset,
    * the managed bean declares this inner class which extends PagedListDataModel
    * and implements the fetchData method. fetchData is called
    * as needed when the table requires data that isn't available in the
    * current data page held by this object.
    * This requires the managed bean (and in general the business
    * method that the managed bean uses) to provide the data wrapped in
    * a DataPage object that provides info on the full size of the dataset.
    */
    private class LocalDataModel extends PagedListDataModel {
        public LocalDataModel(int pageSize) {
            super(pageSize);
        }

        public DataPage<Cuadro> fetchPage(int startRow, int pageSize) {
            // call enclosing managed bean method to fetch the data
            return getDataPage(startRow, pageSize);
        }
    }

    private class LocalDataModelDTO extends PagedListDataModel {
        public LocalDataModelDTO(int pageSize) {
            super(pageSize);
        }

        public DataPage<CuadroDTO> fetchPage(int startRow, int pageSize) {
            // call enclosing managed bean method to fetch the data
            return getDataPageDTO(startRow, pageSize);
        }
    }
}
